package sword.chapter3String;

/**
 * 有效的回文
 * 给定一个字符串，请判断它是不是一个回文字符串。我们只需要考虑字母或者数字字符，并忽略大小写。
 * 例如，"A man, a plan, a canal: Panama"是一个回文字符串，而"race a car"不是。
 * <p>
 * 要点：
 * 1. 方向相反的双指针
 * 2. 值相同则两个指针都朝自己的方向+1
 *
 * @author K
 * @date 2021-11-13 16:52
 */
public class S18IsPalindrome {
    public static void main(String[] args) {
        String s = "A man, a plan, a canal: Panama";
        boolean result = s18IsPalindrome(s);
        System.out.println();
    }

    public static boolean s18IsPalindrome(String s) {
        int start = 0;
        int end = s.length() - 1;
        while (start < end) {
            char ch1 = s.charAt(start);
            char ch2 = s.charAt(end);
            if (!Character.isLetterOrDigit(ch1)) {
                start++;
            } else if (!Character.isLetterOrDigit(ch2)) {
                end--;
            } else {
                ch1 = Character.toLowerCase(ch1);
                ch2 = Character.toLowerCase(ch2);
                if (ch1 == ch2) {
                    start++;
                    end--;
                } else {
                    return false;
                }
            }
        }
        return true;
    }

}
